home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
fdimg
/
oh!.2hd
/
OH!DEN_B.LZH
/
TOOLS
/
CDC
/
CDCSXSRC.LZH
/
ICON.HAS
< prev
next >
Wrap
Text File
|
1995-03-20
|
8KB
|
390 lines
***アイコン部
.include DOSCALL.MAC *標準の奴(XC)
.include SXCALL.MAC
.include SXCALL.H
.include YOU200.MAC *独自のマクロ定義ファイルです
.include HASMACRO.MAC *HAS2.5以降のマクロパッケージ
.include WORK.INC *ワークエリアの内容を定義するファイル
.include FLAG.INC *条件付アセンブル処理を定義するファイル
.include CDC.MAC
SUB_LOOP::
ifne <tst.b SW_Flag+SW_I(a5)> *アイコンが起動していない限り休止
move.l S_event(a5),d0 *「サブ」のウィンドウが参照するワーク
move.w eventTable(pc,d0.w),d0 *イベントコードによって
jsr eventTable(pc,d0.w) *分岐する(返り値をd0に入れること)
.iff WINCOUNT<=2
.xref SUB2_LOOP
jbsr SUB2_LOOP *他にウィンドウを開くなら飛ぶ
.endif
else
~T
endif
rts
.xref MSLUP
.xref MSRUP
.xref KEYUP
.xref dammy
.xref Timerproc
.xref GetEvent
.xref ChkMouse_DClick
eventTable: *分岐テーブル
dc.w S_IDLE-eventTable *0 アイドルイベント
dc.w S_MSLDOWN-eventTable *1 レフトダウンイベント
dc.w MSLUP-eventTable *2 レフトアップイベント
dc.w S_MSRDOWN-eventTable *3 ライトダウンイベント
dc.w MSRUP-eventTable *4 ライトアップイベント
dc.w S_KEYDOWN-eventTable *5 キーダウンイベント
dc.w KEYUP-eventTable *6 キーアップイベント
dc.w S_UPDATE-eventTable *7 アップデートイベント
dc.w dammy-eventTable *8 --
dc.w S_ACTIVATE-eventTable *9 アクティベイトイベント
dc.w dammy-eventTable *10 --
dc.w dammy-eventTable *11 --
dc.w S_SYSTEM1-eventTable *12 システムイベント1
dc.w S_SYSTEM2-eventTable *13 システムイベント2
dc.w dammy-eventTable *14 システムイベント3
dc.w dammy-eventTable *15 システムイベント4
S_IDLE:
* move.l #50,-(sp) *ベースタイム
* pea.l ICN_CHK_COUNTER(a5) *現在のカウンタ(Timerprocの中で更新する)
* SXSUB Timerproc,8 *タイマー処理
* ifmi <tst.l d0>
* CDC _CDC_STAT *CD状態を得る
* move.l d0,a1
* CDC _CDC_TRACKS *CDトラック情報を得る
* move.l d0,a2
move.l IcnCDwork(a5),d0
move.l d0,a1
ifne <tst.l d0>
jbsr IcnTimeDraw
else
~T
rts
endif
led_stat = 46
ifne <and.b #%10,led_stat+3(a1)>
move.l #100,-(sp) *ベースタイム
pea.l RingCOUNTER(a5) *現在のカウンタ(Timerprocの中で更新する)
SXSUB Timerproc,8
ifmi <tst.l d0>
move.w #-1,RingFlg(a5)
move.w #0,IcnLogoFlg(a5)
.xref DrawIcn
SETPORT3 IcnwinPtr(a5)
jbsr DrawIcn
move.w #0,RingFlg(a5)
endif
endif
~T
rts
IcnTimeDraw:
ifeq <tst.w 曲番Flg(a5)>
ifeq <tst.w Led曲数Flg(a5)>
ifeq <tst.l ML_Flg(a5)>
ifeq <tst.l SL_Flg(a5)>
~T
rts
endif
endif
endif
endif
SETPORT3 IcnwinPtr(a5)
link a6,#-10
move.w 曲番10位(a5),d0
add.w #$30,d0
move.b d0,-10(a6)
move.w 曲番1位(a5),d0
add.w #$30,d0
move.b d0,-9(a6)
move.w #' ',-8(a6)
move.w MIN_low(a5),d0
add.w #$30,d0
move.b d0,-5(a6)
move.w MIN_hi(a5),d0
add.w #$30,d0
move.b d0,-6(a6)
move.b #':',-4(a6)
move.w SEC_low(a5),d0
add.w #$30,d0
move.b d0,-2(a6)
move.w SEC_hi(a5),d0
add.w #$30,d0
move.b d0,-3(a6)
move.b #0,-1(a6)
move.w #G_BACK*$100+G_PSET,-(sp)
SX __GMPenMode,2
move.w #G_BLACK,-(sp)
SX __GMBackColor,2
pea.l IcnTime(pc)
SX __GMFillRect,4
move.w #G_GREEN,-(sp)
SX __GMForeColor,2
move.w #G_PSET,-(sp)
SX __GMFontMode,2
move.l #12*$10000+25,-(sp)
SX __GMMove,4
pea.l -10(a6)
SX __GMDrawStrZ,4
unlk a6
rts
IcnTime: dc.w 12,25,70,25+11
S_MSLDOWN:
move.l eventRec_whom1(a5),d0 *左クリックが起きたウィンドウレコード
beq MSLD9 *NILなら
Xlea IcnwinPtr(a5),a1 *自分のウィンドウ上で発生したか?
cmp.l a1,d0
bne MSLD9 *違うならMSLD9へ
SETPORT3 IcnwinPtr(a5)
SXSUB GetEvent,0 *自分へのイベントなのでイベントを取り除く
jbsr ChkMouse_DClick *ダブルクリックならウィンドウ化する
ifne <tst.b D_Click(a5)>
jbsr IcntoWin
~T
rts
elseifeq <tst.w IcnwinActive(a5)>
Xpea IcnwinPtr(a5)
SX __WMSelect,4
move.w #-1,IcnwinActive(a5)
move.w #-1,IcnLogoFlg(a5)
SETPORT3 IcnwinPtr(a5)
jbsr DrawIcn
move.w #0,IcnLogoFlg(a5)
endif
.xref MSLDdrag
move.w IcnwinActive(a5),-(sp)
pea.l IcnwinRect(pc) *RECTPTR
Xpea IcnwinPtr(a5) *WINREC
SXSUB MSLDdrag,10
MSLD9
~T
rts
S_MSRDOWN:
.xref ChkMousePtr
.xref MSRDproc
move.l eventRec_whom1(a5),d0 *右クリック時のウィンドウレコード
beq MSRD9 *NILなら
Xlea IcnwinPtr(a5),a0 *自分のウィンドウレコード
cmp.l a0,d0 *同じウィンドウ上で発生したか
bne MSRD9
move.l eventRec_ShiftBit(a5),d0
ifne <tst.w IcnwinActive(a5)> *現在ウィンドウはアクティブか?
SETPORT3 IcnwinPtr(a5)
SXSUB ChkMousePtr,0 *現在のマウスのローカル座標を
*ワークにいれる
jbsr MSRDproc
bmi MSRD_ERR
elseifne <andi.l #KS_OPT1,d0>
SETPORT3 IcnwinPtr(a5)
SXSUB ChkMousePtr,0
jbsr MSRDproc
bmi MSRD_ERR
endif
MSRD9:
~T
rts
MSRD_ERR:
~F
rts
IcnMenuproc:
rts
S_KEYDOWN:
ifne <tst.w IcnwinActive(a5)> *現在ウィンドウはアクティブか?
ifeq <SCUT K_Q,KS_OPT1>
~F
rts *アクティブでOPT1+Qなら終了
endif
endif
~T
rts
S_UPDATE:
Xpea IcnwinPtr(a5)
SX __WMUpdate,4
* move.w #-1,RingFlg(a5)
move.w #-1,IcnLogoFlg(a5)
SETPORT3 IcnwinPtr(a5)
jbsr DrawIcn
* move.w #0,RingFlg(a5)
move.w #0,IcnLogoFlg(a5)
Xpea IcnwinPtr(a5)
SX __WMUpdtOver,4
~T
rts
S_ACTIVATE:
move.l eventRec_whom1(a5),d0
beq ACT9 *NILなら
Xlea IcnwinPtr(a5),a0 *自分のウィンドウが
ifne <cmp.l a0,d0> *アクティブになった?
move.w #0,IcnwinActive(a5) *アクティブフラグをリセット
else
move.w #-1,IcnwinActive(a5) *アクティブフラグをセット
endif
move.w #-1,IcnLogoFlg(a5)
SETPORT3 IcnwinPtr(a5)
jbsr DrawIcn
move.w #0,IcnLogoFlg(a5)
ACT9:
~T
rts
S_SYSTEM1:
S_SYSTEM2:
move.w eventRec_what2(a5),d0
cmp.w #ENDTSK,d0 *タスクの終了?
beq CloseBox *ならばおしまい
cmp.w #CLOSEALL,d0 *全ウィンドウのクローズ?
beq CloseBox *ならばおしまい
ifeq <cmp.w #WINDOWSELECT,d0> *ウィンドウのセレクト?
move.l d0,-(sp)
jbsr WindowSelect *ならばWindowSelectへ
move.l (sp)+,d0
endif
~T
rts
WindowSelect:
Xpea IcnwinPtr(a5) *自分のウィンドウをアクティブに
SX __WMSelect,4
~T
rts
CloseBox:
~F
rts
IcntoWin::
Xpea IcnwinPtr(a5)
SX __WMSelect,4
move.w #-1,IcnwinActive(a5)
SETPORT3 IcnwinPtr(a5)
move.l #0,-(sp)
SX __GMLocalToGlobal,4
move.w winActive(a5),-(sp)
move.l d0,-(sp)
Xpea winPtr(a5)
SX __WMMove,10
Xpea winPtr(a5)
SX __WMShow,4
ifne <tst.b SW_Flag+SW_I(a5)>
Xpea IcnwinPtr(a5)
.if WINTYPE='H'
SX __WMClose,4
.else
.if WINTYPE='P'
SX __WMDispose,4
.endif
.endif
move.w #0,-(sp) *付属する数値
move.w #SW_I,-(sp) *
move.w #SW_EXCHG,-(sp)
.xref SWITCHproc
SXSUB SWITCHproc,6
move.w #0,IcnwinActive(a5)
Xpea winPtr(a5)
SX __WMSelect,4
move.w #-1,winActive(a5)
endif
rts
_ICNWDEF_NUM = _WDEF_NUM
IcnWinOpen::
link a6,#-8
move.l #0,-(sp)
SX __GMLocalToGlobal,4
move.l d0,_IcnwinRect(a5) *デフォルト位置を得る
_POS1:
add.l IcnwinRect+4(pc),d0 *ウィンドウレクタングルを作成
move.l d0,_IcnwinRect+4(a5)
_POS2:
pea.l -8(a6)
SX __SXGetDispRect,4
pea _IcnwinRect(a5)
pea -8(a6)
pea _IcnwinRect(a5)
SX __GMAdjustRect,12 *エラーはでない予定
move.l taskID(a5),-(sp) *タスクID
move.w #TRUE,-(sp) *クローズボックスあり
move.l #TRUE,-(sp) *手前に
move.w #_ICNWDEF_NUM*16+WINOPT,-(sp)
move.w #TRUE,-(sp) *可視
pea.l WINTITLE(pc) *LASCII
pea.l _IcnwinRect(a5) *ウィンドウレクタングル
Xpea IcnwinPtr(a5) *ワーク上に作成
SX __WMOpen,26
tst.l d0 *エラー?
* bmi Win_init_ERR *ならば_INIT_Errへ
move.w #-1,IcnwinActive(a5) *アクティブフラグをセット
move.w #0,winActive(a5)
SX __EMSysTime,0
move.l d0,RingCOUNTER(a5)
move.l d0,ICN_CHK_COUNTER(a5)
SETPORT3 IcnwinPtr(a5)
unlk a6
~T
rts
IcnwinRect:: dc.w 0,0,80,43
WINTITLE: LASCIIZ 'ICN_OF_CDCSX'
.even
.end